Skip to content

feat: execution arbiter default-on for debug/review (v3.12.0) - #13

Merged
quantsquirrel merged 1 commit into
mainfrom
feat/exec-arbiter-default-on
Jul 30, 2026
Merged

quantsquirrel merged 1 commit into
mainfrom
feat/exec-arbiter-default-on

Conversation

@quantsquirrel

Copy link
Copy Markdown
Owner

The change

-if [[ "${SYNOD_EXEC_ARBITER:-0}" == "1" && ( "$MODE" == "debug" || "$MODE" == "review" ) \
+if [[ "${SYNOD_EXEC_ARBITER:-1}" == "1" && ( "$MODE" == "debug" || "$MODE" == "review" ) \

One character. Everything else is documentation catching up.

Why the flag was redundant

The gate already required all three of:

  • MODE is debug or review
  • a TARGET_PATH was given
  • the Phase 0.5 probe collected ≥ 1 test (exec_arbiter.py:57-62)

Those conditions select exactly the situations where execution can settle
something. The opt-in flag on top was suppressing a signal the pipeline had
already qualified — so the default path kept settling code disputes by argument
even when a runnable suite was sitting right there.

Execution-grounded selection is how SWE-bench SOTA picks among candidates
(CWM, arXiv:2510.02387), and it is the
strongest mechanical signal available — the direction 3.8–3.10 moved every other
decision signal.

== "1", not != "0"

This step executes code, so an unrecognised value must fail toward not
running. Verified against bash rather than assumed:

SYNOD_EXEC_ARBITER result
(unset) RUN
1 RUN
0 skip
true skip
flase (typo) skip

This also matches the repo's dominant idiom (SYNOD_ANONYMIZE:-1 == 1,
SYNOD_V2_AUTO_CLASSIFY:-1 == 1).

What this means in practice

In debug/review mode against a repo with a collectable pytest suite, Synod now
runs that suite.
pytest imports conftest.py and every test module during
collection, so set SYNOD_EXEC_ARBITER=0 for targets whose suite has real side
effects (live services, shared databases, outbound mail).

Bounds are unchanged: pytest -x -q, 120s hard timeout, timeout treated as
UNSETTLED rather than failing, and the arbiter never blocks the pipeline.

Known limitation — documented, not pre-solved

The arbiter runs the target suite with no green baseline, so a pre-existing
failing test is reported as machine-verified evidence (-x stops at the first
failure, which on a red repo is likely unrelated to the dispute). Recorded under
Unreleased → Planned to be fixed if false signals actually show up in use —
building it speculatively, along with scoping the run to the disputed tests, was
over-engineering the owner correctly pushed back on.

Verification

  • Gate truth table exercised in bash (table above)
  • 975 passed / 14 skipped; tests/test_version_consistency.py green
  • All three JSON manifests parse; version 3.12.0 in all four declarations
  • ruff check + ruff format --check clean
  • Docs updated in lockstep: SKILL.md flag table, Phase 2 module heading + guard note, both READMEs' research-basis rows, marketplace copy that still said "opt-in"

🤖 Generated with Claude Code

One character of behaviour change: `${SYNOD_EXEC_ARBITER:-0}` becomes
`${SYNOD_EXEC_ARBITER:-1}` in synod-phase2-critic.md. Everything else in this
commit is documentation catching up.

Why the flag was redundant: the gate already required MODE to be debug or
review, a TARGET_PATH, and a Phase 0.5 probe that collected >= 1 test. Those
three conditions select exactly the situations where execution can settle
something — so the opt-in flag was suppressing a signal the pipeline had
already qualified, and the default path kept settling code disputes by
argument. Execution-grounded selection is how SWE-bench SOTA picks among
candidates (CWM arXiv:2510.02387), and it is the strongest mechanical signal
available, which is where 3.8-3.10 moved everything else.

Kept the `== "1"` form rather than `!= "0"`. This step executes code, so an
unrecognised value should fail toward NOT running:

  (unset) -> RUN    '1' -> RUN    '0' -> skip    'true' -> skip    'flase' -> skip

verified against bash directly, not assumed.

Known limitation, documented rather than pre-solved: the arbiter runs the
target suite with no green baseline, so a PRE-EXISTING failing test is reported
as machine-verified evidence. Recorded under Unreleased/Planned to be fixed if
false signals actually show up in use — building it speculatively was the
over-engineering the owner pushed back on. Same for scoping the run to the
disputed tests. Bounds unchanged: pytest -x -q, 120s hard timeout, timeout =
UNSETTLED, never blocks the pipeline.

Version 3.12.0 in all four declarations. Docs updated in lockstep: SKILL.md
flag table, Phase 2 module heading and guard note, both READMEs' research-basis
rows, and the marketplace copy that still called the arbiter opt-in.

975 passed / 14 skipped; version-consistency guard green; ruff clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@quantsquirrel
quantsquirrel merged commit 9480fe0 into main Jul 30, 2026
6 checks passed
@quantsquirrel
quantsquirrel deleted the feat/exec-arbiter-default-on branch July 30, 2026 08:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant